Telegram Group & Telegram Channel
🐍 Хитрая задача на замыкания в Python

🔹 Уровень: Advanced
🔹 Темы: замыкания (closures), переменные цикла, lambda, отложенное выполнение

📌 Условие

Что выведет следующий код?


funcs = []

for i in range(5):
funcs.append(lambda: i)

results = [f() for f in funcs]
print(results)


Вопросы

1. Почему вывод может не соответствовать ожиданиям [0, 1, 2, 3, 4]?
2. Что именно "запоминает" lambda внутри цикла?
3. Как переписать код, чтобы результат был [0, 1, 2, 3, 4]?

🔍 Разбор

Ожидаемый (неправильный) вывод:

[4, 4, 4, 4, 4]


🔧 Почему так происходит

- Все lambda внутри funcs замыкают одну и ту же переменную `i`.
- К моменту выполнения f() переменная i уже равна 4 — и так для всех функций.

⚠️ Подвох

lambda: i не захватывает значение, а ссылается на переменную, которая будет изменяться при каждой итерации цикла.
В итоге — все lambda ссылаются на одно и то же `i`, которое стало равно 4 к концу цикла.

🧠 Решение

Нужно "зафиксировать" значение i, передав его как аргумент по умолчанию в lambda:


for i in range(5):
funcs.append(lambda i=i: i)


Теперь результат будет:

[0, 1, 2, 3, 4]


📌 Это один из самых частых подвохов в Python, особенно при использовании лямбда-функций в генераторах и UI-коллбеках.



tg-me.com/python_job_interview/1113
Create:
Last Update:

🐍 Хитрая задача на замыкания в Python

🔹 Уровень: Advanced
🔹 Темы: замыкания (closures), переменные цикла, lambda, отложенное выполнение

📌 Условие

Что выведет следующий код?


funcs = []

for i in range(5):
funcs.append(lambda: i)

results = [f() for f in funcs]
print(results)


Вопросы

1. Почему вывод может не соответствовать ожиданиям [0, 1, 2, 3, 4]?
2. Что именно "запоминает" lambda внутри цикла?
3. Как переписать код, чтобы результат был [0, 1, 2, 3, 4]?

🔍 Разбор

Ожидаемый (неправильный) вывод:

[4, 4, 4, 4, 4]


🔧 Почему так происходит

- Все lambda внутри funcs замыкают одну и ту же переменную `i`.
- К моменту выполнения f() переменная i уже равна 4 — и так для всех функций.

⚠️ Подвох

lambda: i не захватывает значение, а ссылается на переменную, которая будет изменяться при каждой итерации цикла.
В итоге — все lambda ссылаются на одно и то же `i`, которое стало равно 4 к концу цикла.

🧠 Решение

Нужно "зафиксировать" значение i, передав его как аргумент по умолчанию в lambda:


for i in range(5):
funcs.append(lambda i=i: i)


Теперь результат будет:

[0, 1, 2, 3, 4]


📌 Это один из самых частых подвохов в Python, особенно при использовании лямбда-функций в генераторах и UI-коллбеках.

BY Python вопросы с собеседований


Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283

Share with your friend now:
tg-me.com/python_job_interview/1113

View MORE
Open in Telegram


Python вопросы с собеседований Telegram | DID YOU KNOW?

Date: |

However, analysts are positive on the stock now. “We have seen a huge downside movement in the stock due to the central electricity regulatory commission’s (CERC) order that seems to be negative from 2014-15 onwards but we cannot take a linear negative view on the stock and further downside movement on the stock is unlikely. Currently stock is underpriced. Investors can bet on it for a longer horizon," said Vivek Gupta, director research at CapitalVia Global Research.

Launched in 2013, Telegram allows users to broadcast messages to a following via “channels”, or create public and private groups that are simple for others to access. Users can also send and receive large data files, including text and zip files, directly via the app.The platform said it has more than 500m active users, and topped 1bn downloads in August, according to data from SensorTower.Python вопросы с собеседований from us


Telegram Python вопросы с собеседований
FROM USA